#ifndef _HEAD_H
#define _HEAD_H

/* 存放idt gdt pg_dir 等描述符表 页表地址的申明 */

/*
 * 描述符表结构体，每一项4字节
 * 共256项目，用于gdt idt ldt
 * 因为这些描述符表的长度是靠16位选择符的高13位进行索引（低3位表示RPL和全局还是局部描述符表）
 * 	因此 2^13 = 8192个
 * 此处只用了256个
 */
typedef struct desc_struct {
	unsigned long a,b;
} desc_table[256];

extern unsigned long _pg_dir[1024];
#define pg_dir _pg_dir
extern desc_table _idt,_gdt; /* extern 要与汇编中的名称一致 */
#define idt _idt /* 因此重新定义一个不带下划线的 */
#define gdt _gdt

#define GDT_NUL 0
#define GDT_CODE 1
#define GDT_DATA 2
#define GDT_TMP 3

#define LDT_NUL 0
#define LDT_CODE 1
#define LDT_DATA 2

#endif